#!/usr/bin/env node

/**
 * 测试 On-demand Revalidation 的脚本
 * 使用方法: node scripts/test-revalidation.js
 */

const BASE_URL = 'http://localhost:3000';
const TOKEN = 'your-secret-token';

// 测试重新验证单个页面
async function testRevalidatePage(path) {
  console.log(`🔄 测试重新验证页面: ${path}`);
  
  try {
    const response = await fetch(`${BASE_URL}/api/revalidate`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-revalidate-token': TOKEN
      },
      body: JSON.stringify({ path })
    });

    const data = await response.json();
    
    if (data.success) {
      console.log(`✅ 成功重新验证: ${path}`);
      console.log(`   时间: ${data.timestamp}`);
    } else {
      console.log(`❌ 重新验证失败: ${data.error}`);
    }
    
    return data;
  } catch (error) {
    console.error(`❌ 请求失败: ${error.message}`);
    return null;
  }
}

// 测试批量重新验证
async function testBatchRevalidate() {
  console.log('🔄 测试批量重新验证');
  
  const paths = ['/', '/about', '/user/1', '/realtime'];
  const results = [];
  
  for (const path of paths) {
    const result = await testRevalidatePage(path);
    results.push({ path, result });
    
    // 添加延迟避免过于频繁的请求
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
  
  const successCount = results.filter(r => r.result?.success).length;
  console.log(`\n📊 批量重新验证结果: ${successCount}/${paths.length} 成功`);
  
  return results;
}

// 测试 GET 请求方式
async function testGetRevalidate(path) {
  console.log(`🔄 测试 GET 方式重新验证: ${path}`);
  
  try {
    const response = await fetch(`${BASE_URL}/api/revalidate?path=${encodeURIComponent(path)}&token=${TOKEN}`);
    const data = await response.json();
    
    if (data.success) {
      console.log(`✅ GET 方式成功: ${path}`);
    } else {
      console.log(`❌ GET 方式失败: ${data.error}`);
    }
    
    return data;
  } catch (error) {
    console.error(`❌ GET 请求失败: ${error.message}`);
    return null;
  }
}

// 主函数
async function main() {
  console.log('🚀 开始测试 On-demand Revalidation');
  console.log('=' .repeat(50));
  
  // 检查服务器是否运行
  try {
    const healthCheck = await fetch(`${BASE_URL}`);
    if (!healthCheck.ok) {
      throw new Error('服务器未运行');
    }
    console.log('✅ 服务器连接正常');
  } catch (error) {
    console.error('❌ 无法连接到服务器，请确保 Next.js 开发服务器正在运行');
    console.error('   运行命令: npm run dev');
    process.exit(1);
  }
  
  console.log('');
  
  // 测试单个页面重新验证
  await testRevalidatePage('/');
  console.log('');
  
  // 测试 GET 方式
  await testGetRevalidate('/about');
  console.log('');
  
  // 测试批量重新验证
  await testBatchRevalidate();
  
  console.log('');
  console.log('🎉 测试完成！');
  console.log('');
  console.log('💡 提示:');
  console.log('   - 访问 http://localhost:3000/admin 查看管理界面');
  console.log('   - 重新验证后，刷新对应页面查看最新内容');
  console.log('   - 检查控制台日志确认重新验证是否成功');
}

// 运行测试
if (require.main === module) {
  main().catch(console.error);
}

module.exports = {
  testRevalidatePage,
  testBatchRevalidate,
  testGetRevalidate
};
